Reactã®å®éšçããã¯experimental_useMutableSourceã®ããã©ãŒãã³ã¹ãšæé©åæŠç¥ãæ¢ããŸããã°ããŒãã«ã¢ããªã§ã®ãã¥ãŒã¿ãã«ããŒã¿åŠçã«ãããå©ç¹ããŠãŒã¹ã±ãŒã¹ãé«é »åºŠæŽæ°ã®ãã¹ããã©ã¯ãã£ã¹ã解説ã
React experimental_useMutableSourceã®ããã©ãŒãã³ã¹ïŒã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ããããã¥ãŒã¿ãã«ããŒã¿ã¢ã¯ã»ã¹ã®æé©å
çµ¶ããé²åããããã³ããšã³ãéçºã®äžçã«ãããŠãããã©ãŒãã³ã¹ã¯æãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ãããè€éã«ãªãããªã¢ã«ã¿ã€ã æŽæ°ãèŠæ±ãããããã«ãªãã«ã€ããŠãéçºè
ã¯ããŒã¿åŠçãšã¬ã³ããªã³ã°ãæé©åããæ¹æ³ãåžžã«æš¡çŽ¢ããŠããŸããReactã®å®éšçãªuseMutableSourceããã¯ã¯ãç¹ã«é«é »åºŠã®æŽæ°ããã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ãæ±ãéã«ããããã®èª²é¡ã«åãçµãããã«èšèšããã匷åãªããŒã«ãšããŠç»å ŽããŸããããã®èšäºã§ã¯ãuseMutableSourceã®ããã©ãŒãã³ã¹é¢ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ããããã®å©ç¹ããããŠãã®å¯èœæ§ãæå€§éã«æŽ»çšããããã®å®è·µçãªæŠç¥ã«ã€ããŠè©³ããæãäžããŸãã
ãã¥ãŒã¿ãã«ããŒã¿æé©åã®å¿ èŠæ§ãçè§£ãã
Reactã«ãããåŸæ¥ã®ã¹ããŒã管çã¯ãå€ãã®å Žåã€ãã¥ãŒã¿ãã«ãªããŒã¿æ§é ã«äŸåããŠããŸããã€ãã¥ãŒã¿ããªãã£ã¯äºæž¬å¯èœãªç¶æ é·ç§»ããããã°ã®å®¹æããšãã£ãå©ç¹ãæäŸããŸãããé »ç¹ã§çްããªæŽæ°ãæ±ãéã«ã¯ããã©ãŒãã³ã¹ã®ãªãŒããŒããããåŒãèµ·ããå¯èœæ§ããããŸããäŸãã°ã以äžã®ãããªã·ããªãªãèããŠã¿ãŸãããïŒ
- ãªã¢ã«ã¿ã€ã ããŒã¿ãã£ãŒãïŒ æ ªäŸ¡è¡šç€ºãã©ã€ããã£ããã¡ãã»ãŒãžãå ±åç·šéãã©ãããã©ãŒã ãã»ã³ãµãŒããŒã¿ã¹ããªãŒã ãªã©ã¯ãå€§èŠæš¡ãªããŒã¿ã»ããã«å¯Ÿããçµ¶ãéãªãå°ããªæŽæ°ãé »ç¹ã«äŒŽããŸãã
- ã¢ãã¡ãŒã·ã§ã³ãšç©çãšã³ãžã³ïŒ è€éãªã¢ãã¡ãŒã·ã§ã³ãç©çæŒç®ãã·ãã¥ã¬ãŒãããã«ã¯ããªããžã§ã¯ãã®äœçœ®ãé床ããã®ä»ã®ããããã£ãé »ç¹ã«æŽæ°ããå¿ èŠããããŸãã
- å€§èŠæš¡ã·ãã¥ã¬ãŒã·ã§ã³ïŒ ç§åŠçã·ãã¥ã¬ãŒã·ã§ã³ãããŒã¿å¯èŠåã§ã¯ããã¬ãŒã ããšã«äœåãäœçŸäžãã®ããŒã¿ãã€ã³ããæŽæ°ããããšããããŸãã
ãããã®ã±ãŒã¹ã§ã¯ãããããªå€æŽã®ãã³ã«ããŒã¿æ§é å šäœã®æ°ããã³ããŒãäœæããããšã倧ããªããã«ããã¯ãšãªããã¬ã³ããªã³ã°ã®é å»¶ãã¡ã¢ãªæ¶è²»ã®å¢å ããããŠç¹ã«ç°ãªãå°ççå°åã«ããæ§ã ãªãããã¯ãŒã¯ç¶æ³ã®ãŠãŒã¶ãŒã«ãšã£ãŠããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
`experimental_useMutableSource`ã®ç޹ä»
Reactã®å®éšçãªuseMutableSourceããã¯ã¯ãé »ç¹ã«æŽæ°ããããã¥ãŒã¿ãã«ããŒã¿ã«é¢é£ããããã©ãŒãã³ã¹ã®èª²é¡ã«å¯ŸåŠããããã«ç¹å¥ã«èšèšãããŠããŸããããã«ãããã³ã³ããŒãã³ãã¯å€éšã®ãã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ã«ãµãã¹ã¯ã©ã€ãããã€ãã¥ãŒã¿ãã«ãªã¹ããŒã管çã®å
žåçãªãªãŒããŒããããªãã«æŽæ°ãåãåãããšãã§ããŸããéèŠãªã¢ã€ãã¢ã¯ãuseMutableSourceãReactã®ã³ã¢ãªã¹ããŒãã·ã¹ãã ã®å€éšã§ç®¡çãããããŒã¿ã«ã¢ã¯ã»ã¹ãã倿Žã«åå¿ããããã®ããçŽæ¥çã§å¹ççãªæ¹æ³ãæäŸãããšããç¹ã§ãã
ä»çµã¿ïŒæŠå¿µçæŠèŠïŒ
useMutableSourceã¯ãReactã³ã³ããŒãã³ããšå€éšã®ãã¥ãŒã¿ãã«ãªããŒã¿ã¹ãã¢ãšã®éã®ã®ã£ãããåããããšã«ãã£ãŠæ©èœããŸããããŒã¿ãœãŒã¹ã®çŸåšã®å€ãèªã¿åãããã®getSnapshot颿°ãšãããŒã¿ãœãŒã¹ã倿Žããããšãã«åŒã³åºãããã³ãŒã«ããã¯ãç»é²ããããã®subscribe颿°ã«äŸåããŠããŸãã
ããŒã¿ãœãŒã¹ãæŽæ°ããããšãsubscribeã«æäŸãããã³ãŒã«ããã¯ãããªã¬ãŒãããŸããReactã¯ãã®åŸãææ°ã®ããŒã¿ãååŸããããã«å床getSnapshotãåŒã³åºããŸããããŒã¿ã倿ŽãããŠããã°ãReactã¯ãã®ã³ã³ããŒãã³ãã®åã¬ã³ããªã³ã°ãã¹ã±ãžã¥ãŒã«ããŸããéèŠãªããšã«ãuseMutableSourceã¯ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ãæèããŠèšèšãããŠãããReactã®ææ°ã®ã¬ã³ããªã³ã°ã¡ã«ããºã ãšå¹ççã«çµ±åã§ããããšãä¿èšŒãããŠããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããäž»ãªå©ç¹
useMutableSourceã®ããã©ãŒãã³ã¹äžã®å©ç¹ã¯ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«åœ±é¿ã倧ããã§ãïŒ
- ãªã¢ã«ã¿ã€ã ããŒã¿ã®é
å»¶åæžïŒ äžçäžã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠããªã¢ã«ã¿ã€ã ããŒã¿ã®åä¿¡ãšè¡šç€ºã«ãããé
å»¶ãæå°éã«æããããšã¯éåžžã«éèŠã§ãã
useMutableSourceã®å¹ççãªæŽæ°ã¡ã«ããºã ã¯ããŠãŒã¶ãŒãå Žæã«é¢ä¿ãªããå¯èœãªéããªã¢ã«ã¿ã€ã ã«è¿ãæ å ±ãèŠãããšãã§ããããã«ããŸãã - é«é »åºŠæŽæ°ã·ããªãªã«ãããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒ ã°ããŒãã«ãªãŠãŒã¶ãŒã¯æ§ã
ãªãããã¯ãŒã¯é床ãçµéšããå¯èœæ§ããããŸããé »ç¹ãªæŽæ°ã«é¢é£ããã¬ã³ããªã³ã°ã®ãªãŒããŒããããåæžããããšã§ã
useMutableSourceã¯ä¿¡é Œæ§ã®äœãæ¥ç¶äžã§ããããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«è²¢ç®ããŸãã - å€§èŠæš¡ããŒã¿ã»ããã®å¹ççãªåŠçïŒ å€ãã®ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã¯ãå€§èŠæš¡ã§åçãªããŒã¿ã»ããïŒäŸïŒã©ã€ã亀éæ
å ±ä»ãã®å°å³ãäžççµæžããã·ã¥ããŒãïŒãæ±ããŸãã
useMutableSourceããã¥ãŒã¿ãã«ããŒã¿ãžã®ã¢ã¯ã»ã¹ãæé©åããèœåã«ããããããã®ããŒã¿ã»ãããçµ¶ããå€åããŠããå Žåã§ãã¢ããªã±ãŒã·ã§ã³ãé ããªãã®ãé²ããŸãã - ãªãœãŒã¹å©çšã®æ¹åïŒ ããŒã¿æ§é ã®äžå¿
èŠãªã³ããŒãé¿ããããšã§ã
useMutableSourceã¯CPUãšã¡ã¢ãªã®äœ¿çšéãäœæžãããããšãã§ããŸããããã¯ãæ§ã ãªããã€ã¹ããããã¯ãŒã¯ç¶æ³ã®ãŠãŒã¶ãŒã«ãšã£ãŠæçã§ãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ãšæé©åæŠç¥
useMutableSourceã¯å€§ããªããã©ãŒãã³ã¹åäžããããããŸããããã®å¹æçãªæŽ»çšã«ã¯ãããã©ãŒãã³ã¹æé©åãžã®ææ
®æ·±ãã¢ãããŒããå¿
èŠã§ãã
1. å¹ççãª`getSnapshot`ã®å®è£
getSnapshot颿°ã¯ããã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ã®çŸåšã®ç¶æ
ãèªã¿åã圹å²ãæ
ããŸãããã®ããã©ãŒãã³ã¹ã¯åã¬ã³ããªã³ã°ãµã€ã¯ã«ã«çŽæ¥åœ±é¿ããŸãã
- èšç®ãæå°éã«ïŒ
getSnapshotãã§ããã ãéãããŒã¿ãè¿ãããã«ããŠãã ããããã®é¢æ°å ã§è€éãªèšç®ãããŒã¿å€æãè¡ãããšã¯é¿ããŠãã ããã倿ãå¿ èŠãªå Žåã¯ãçæ³çã«ã¯ããŒã¿ãã¬ã³ããªã³ã°ã®ããã«*èªã¿åããã*ãšãã§ã¯ãªãããœãŒã¹ã«*æžã蟌ãŸãã*ãšãã«è¡ãã¹ãã§ãã - 倿Žããªãå Žåã¯åãåç
§ãè¿ãïŒ ååã®åŒã³åºãããããŒã¿ãå®éã«å€æŽãããŠããªãå Žåã¯ãå
šãåãåç
§ãè¿ããŠãã ãããReactã¯åç
§ã®ç䟡æ§ãçšããŠåã¬ã³ããªã³ã°ãå¿
èŠãã©ããã倿ããŸããåºã«ãªãããŒã¿ãåãã§ããã«ãããããã
getSnapshotãäžè²«ããŠæ°ãããªããžã§ã¯ããè¿ããšãäžå¿ èŠãªåã¬ã³ããªã³ã°ã«ã€ãªããå¯èœæ§ããããŸãã - ããŒã¿ã®ç²åºŠãèæ
®ããïŒ ãã¥ãŒã¿ãã«ãœãŒã¹ã倧ããªãªããžã§ã¯ããå«ãã§ããŠãã³ã³ããŒãã³ãããã®äžéšããå¿
èŠãšããªãå Žåãé¢é£ãããµãã»ããã®ã¿ãè¿ãããã«
getSnapshotãæé©åããŠãã ãããããã«ãããåã¬ã³ããªã³ã°äžã«åŠçãããããŒã¿éãããã«åæžã§ããŸãã
2. `subscribe`ã¡ã«ããºã ã®æé©å
subscribe颿°ã¯ãReactããã€getSnapshotãåè©äŸ¡ãã¹ãããç¥ãããã«äžå¯æ¬ ã§ããéå¹ççãªãµãã¹ã¯ãªãã·ã§ã³ã¢ãã«ã¯ãæŽæ°ã®èŠéããéå°ãªããŒãªã³ã°ã«ã€ãªããå¯èœæ§ããããŸãã
- æ£ç¢ºãªãµãã¹ã¯ãªãã·ã§ã³ïŒ
subscribe颿°ã¯ãã³ã³ããŒãã³ãã«é¢é£ããããŒã¿ãå®éã«å€æŽããã*ãšãã ã*åŒã³åºãããã³ãŒã«ããã¯ãç»é²ããã¹ãã§ããé¢é£ã®ãªãããŒã¿ã®æŽæ°ãããªã¬ãŒãããããªåºç¯ãªãµãã¹ã¯ãªãã·ã§ã³ã¯é¿ããŠãã ããã - å¹ççãªã³ãŒã«ããã¯åŒã³åºãïŒ
subscribeã§ç»é²ãããã³ãŒã«ããã¯ã軜éã§ããããšã確èªããŠãã ãããããã¯äž»ã«Reactã«åè©äŸ¡ãéç¥ãããã®ã§ãããããèªäœã§éãããžãã¯ãå®è¡ããã¹ãã§ã¯ãããŸããã - ã¯ãªãŒã³ã¢ãããéèŠïŒ ã³ã³ããŒãã³ããã¢ã³ããŠã³ããããéã«ã¯ãé©åã«ãµãã¹ã¯ã©ã€ããè§£é€ããŠãã ãããããã«ããã¡ã¢ãªãªãŒã¯ãé²ããReactããã¯ãDOMã«ååšããªãã³ã³ããŒãã³ããæŽæ°ããããšããããšãé²ããŸãã
subscribe颿°ã¯ã¯ãªãŒã³ã¢ãã颿°ãè¿ãã¹ãã§ãã
3. ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ãšã®çµ±åãçè§£ãã
useMutableSourceã¯Reactã®ã³ã³ã«ã¬ã³ãæ©èœã念é ã«çœ®ããŠæ§ç¯ãããŠããŸããããã¯ãã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ããã©ã³ãžã·ã§ã³ã®ãããªæ©èœãšã·ãŒã ã¬ã¹ã«çµ±åã§ããããšãæå³ããŸãã
- ãã³ããããã³ã°æŽæ°ïŒ ã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ã«ãããReactã¯ã¬ã³ããªã³ã°ãäžæãããåéãããããããšãã§ããŸãã
useMutableSourceã¯ãããšé£æºããããã«èšèšãããŠãããé«é »åºŠã®æŽæ°ãã¡ã€ã³ã¹ã¬ããããããã¯ãããããå¿çæ§ã®é«ãUIã«ã€ãªããããšãä¿èšŒããŸãã - ãã©ã³ãžã·ã§ã³ïŒ ç·æ¥ã§ã¯ãªãæŽæ°ã«ã€ããŠã¯ãReactã®
useTransitionããã¯ãuseMutableSourceãšçµã¿åãããŠäœ¿çšããããšãæ€èšããŠãã ãããããã«ãããéèŠåºŠã®äœãããŒã¿æŽæ°ãé å»¶ãããããšãã§ãããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãåªå ããŠã¹ã ãŒãºãªäœéšãä¿èšŒããŸããäŸãã°ããã£ã«ã¿ãŒã®å€æŽã«å¿ããŠè€éãªãã£ãŒããæŽæ°ããå Žåããã©ã³ãžã·ã§ã³ã§ã©ããããããšã§æ©æµãåãããããããŸããã
4. é©åãªå€éšããŒã¿ãœãŒã¹ã®éžæ
useMutableSourceã®æå¹æ§ã¯ããããçžäºäœçšããå€éšããŒã¿ãœãŒã¹ã«å€§ããäŸåããŸããé »ç¹ãªæŽæ°ã«æé©åãããããŒã¿ãœãŒã¹ãæ€èšããŠãã ããïŒ
- ã«ã¹ã¿ã ãã¥ãŒã¿ãã«ã¹ãã¢ïŒ éåžžã«ç¹æ®ãªããã©ãŒãã³ã¹èŠä»¶ã®ããã«ã¯ãã«ã¹ã¿ã ã®ãã¥ãŒã¿ãã«ããŒã¿ã¹ãã¢ãå®è£
ããããšãã§ããŸãããã®ã¹ãã¢ã¯ãæŽæ°ã®ããã®ç¬èªã®å
éšæé©åãåŠçããå¿
èŠãª
getSnapshotãšsubscribeã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã - ãã¥ãŒã¿ãã«ãªç¶æ
ãæã€ã©ã€ãã©ãªïŒ äžéšã®ç¶æ
管çã©ã€ãã©ãªãããŒã¿ãã§ãããœãªã¥ãŒã·ã§ã³ã¯ã
useMutableSourceãšã®çµ±åã«é©ãããã¥ãŒã¿ãã«ãªããŒã¿æ§é ãAPIãæäŸããå ŽåããããŸãã
5. ãããã¡ã€ãªã³ã°ãšãã³ãããŒãã³ã°
ã©ããªããã©ãŒãã³ã¹æé©åã«ãããŠããå³å¯ãªãããã¡ã€ãªã³ã°ãšãã³ãããŒãã³ã°ã¯äžå¯æ¬ ã§ãã
- React DevTools ProfilerïŒ React DevTools Profilerã䜿çšããŠãã©ã®ã³ã³ããŒãã³ããé »ç¹ã«ã¬ã³ããªã³ã°ãããŠãããããŸããã®çç±ãç¹å®ããŸãã
useMutableSourceã䜿çšããŠããã³ã³ããŒãã³ãã«ç¹ã«æ³šæãæã£ãŠãã ããã - ãã©ãŠã¶ã®ããã©ãŒãã³ã¹ããŒã«ïŒ ãã©ãŠã¶ã®éçºè ããŒã«ïŒäŸïŒChrome DevToolsã®Performanceã¿ãïŒãå©çšããŠãCPU䜿çšçãã¡ã¢ãªå²ãåœãŠãåæããJavaScriptã®ããã«ããã¯ãç¹å®ããŸãã
- ãããã¯ãŒã¯ç¶æ³ã®ã·ãã¥ã¬ãŒã·ã§ã³ïŒ æ§ã
ãªãããã¯ãŒã¯ç¶æ³äžã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããäžçäžã®ç°ãªãã€ã³ã¿ãŒãããé床ã®ãŠãŒã¶ãŒã«å¯ŸããŠ
useMutableSourceãã©ã®ããã«æ©èœããããçè§£ããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ããããŠãŒã¹ã±ãŒã¹
useMutableSourceãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«å€§ããªå©çãããããããšãã§ãããããã€ãã®å®è·µçãªã·ããªãªãæ¢ã£ãŠã¿ãŸãããïŒ
1. ãªã¢ã«ã¿ã€ã ã»ã°ããŒãã«ããã·ã¥ããŒã
æ§ã ãªå°åããã®ã©ã€ãããŒã¿ã衚瀺ããããã·ã¥ããŒããæ³åããŠã¿ãŠãã ããïŒæ ªäŸ¡ããã¥ãŒã¹ãã£ãŒãããœãŒã·ã£ã«ã¡ãã£ã¢ã®ãã¬ã³ãããããã¯ã°ããŒãã«ããžãã¹ã®éçšã¡ããªã¯ã¹ãªã©ããã®ããŒã¿ã¯æ°ç§ããšããããã¯ãã以äžã®éãã§æŽæ°ããããããããŸããã
- 課é¡ïŒ å€ãã®ã³ã³ããŒãã³ãã«ããã£ãŠè€æ°ã®ããŒã¿ãã€ã³ããçµ¶ããæŽæ°ãããšãç¹ã«åæŽæ°ãã€ãã¥ãŒã¿ãã«ãªç¶æ ã§å®å šãªåã¬ã³ããªã³ã°ãµã€ã¯ã«ãåŒãèµ·ããå ŽåãUIã® sluggishnessïŒåäœã®éãïŒã«ã€ãªããå¯èœæ§ããããŸãã
useMutableSourceã«ãã解決çïŒ ãã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ïŒäŸïŒWebSocketé§åã®ããŒã¿ã¹ãã¢ïŒãã©ã€ãããŒã¿ãä¿æã§ããŸããã³ã³ããŒãã³ãã¯useMutableSourceã䜿çšããŠãã®ããŒã¿ã®ç¹å®ã®éšåã«ãµãã¹ã¯ã©ã€ãã§ããŸããæ ªäŸ¡ã倿Žããããšããã®äŸ¡æ Œã衚瀺ããŠããã³ã³ããŒãã³ãã ããæŽæ°ããããã®æŽæ°èªäœãéåžžã«å¹ççã«ãªããŸãã- ã°ããŒãã«ãªã€ã³ãã¯ãïŒ æ±äº¬ããã³ãã³ããã¥ãŒãšãŒã¯ã®ãŠãŒã¶ãŒã¯çãã¢ããªã±ãŒã·ã§ã³ãããªãŒãºããããšãªãã¿ã€ã ãªãŒãªæŽæ°ãåãåããã¿ã€ã ãŸãŒã³ããããã¯ãŒã¯ç¶æ³ãè¶ããŠäžè²«ããäœéšãä¿èšŒãããŸãã
2. å ±åäœæ¥çšãã¯ã€ãããŒããšãã¶ã€ã³ããŒã«
è€æ°ã®ãŠãŒã¶ãŒãå ±æãã£ã³ãã¹äžã§ãªã¢ã«ã¿ã€ã ã«å ±åäœæ¥ããã¢ããªã±ãŒã·ã§ã³ãäŸãã°å ±åäœæ¥çšãã¯ã€ãããŒãããã¶ã€ã³ããŒã«ãªã©ã
- 課é¡ïŒ ãããŠãŒã¶ãŒã«ãããã¹ãŠã®ãã³ã¹ãããŒã¯ãå³åœ¢ã®å€æŽãããã¹ãç·šéã¯ãä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒã«å³åº§ã«åæ ãããå¿ èŠããããŸããããã«ã¯ã倧éã®å°ããªããŒã¿æŽæ°ã䌎ããŸãã
useMutableSourceã«ãã解決çïŒ ãã£ã³ãã¹ã®ç¶æ ïŒäŸïŒå³åœ¢ã®é åããã®ããããã£ïŒã¯ããã¥ãŒã¿ãã«ã§å調çãªããŒã¿ã¹ãã¢ã§ç®¡çã§ããŸããæ¥ç¶ãããŠããåã¯ã©ã€ã¢ã³ãã®UIã³ã³ããŒãã³ãã¯ãuseMutableSourceã䜿çšããŠãã£ã³ãã¹ã®ç¶æ ã«ãµãã¹ã¯ã©ã€ãã§ããŸããäžäººã®ãŠãŒã¶ãŒãæç»ãããšã倿Žãã¹ãã¢ã«ããã·ã¥ãããuseMutableSourceã¯ãã£ã³ãã¹å šäœãåã ã®ã³ã³ããŒãã³ããäžå¿ èŠã«åã¬ã³ããªã³ã°ããããšãªããæ¥ç¶ãããŠããä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒã®ãã¥ãŒãå¹ççã«æŽæ°ããŸãã- ã°ããŒãã«ãªã€ã³ãã¯ãïŒ äžçäžã«æ£ãã°ãããŒã ãã·ãŒã ã¬ã¹ã«å ±åäœæ¥ã§ããæç»ã¢ã¯ã·ã§ã³ãã»ãŒç¬æã«å šå¡ã«è¡šç€ºãããããšã§ãçã®ãªã¢ã«ã¿ã€ã ã€ã³ã¿ã©ã¯ã·ã§ã³ãä¿é²ãããŸãã
3. ã©ã€ãããŒã¿ãªãŒããŒã¬ã€ä»ãã€ã³ã¿ã©ã¯ãã£ãããã
ã©ã€ãã®äº€éç¶æ³ããã©ã€ããã©ãã«ãŒããŸãã¯æ°è±¡ãã¿ãŒã³ã衚瀺ããã°ããŒãã«ãããã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããã
- 課é¡ïŒ ãããã¯ãäœçŸãäœåãã®ãšã³ãã£ãã£ïŒè»ãé£è¡æ©ã倩æ°ã¢ã€ã³ã³ïŒã®äœçœ®ãç¶æ ãåæã«æŽæ°ããå¿ èŠããããããããŸããã
useMutableSourceã«ãã解決çïŒ ãããã®ãšã³ãã£ãã£ã®äœçœ®ããã³ç¶æ ããŒã¿ã¯ãé »ç¹ãªæžã蟌ã¿ã«æé©åããããã¥ãŒã¿ãã«ãªããŒã¿æ§é ã«ä¿æã§ããŸãããããããŒã«ãŒãã¬ã³ããªã³ã°ããã³ã³ããŒãã³ãã¯ãuseMutableSourceãä»ããŠé¢é£ããããŒã¿ãã€ã³ãã«ãµãã¹ã¯ã©ã€ãã§ããŸããé£è¡æ©ã®äœçœ®ãå€ãããšãgetSnapshot颿°ããã®å€æŽãæ€åºããç¹å®ã®ããŒã«ãŒã³ã³ããŒãã³ããå¹ççã«åã¬ã³ããªã³ã°ãããŸãã- ã°ããŒãã«ãªã€ã³ãã¯ãïŒ ã©ãã«ãããŠãŒã¶ãŒã§ãã远跡ãããŠãããšã³ãã£ãã£ã®æ°ã«é¢ä¿ãªãããªã¢ã«ã¿ã€ã ã®æŽæ°ãã¹ã ãŒãºã«æµããåçã§å¿çæ§ã®é«ããããã衚瀺ã§ããŸãã
4. ã²ãŒã ãšãªã¢ã«ã¿ã€ã ã·ãã¥ã¬ãŒã·ã§ã³
Webãã©ãŠã¶ã§ã¬ã³ããªã³ã°ããããªã³ã©ã€ã³ã²ãŒã ãç§åŠã·ãã¥ã¬ãŒã·ã§ã³ã®å Žåãã²ãŒã ã®ç¶æ ãã·ãã¥ã¬ãŒã·ã§ã³ãã©ã¡ãŒã¿ã®ç®¡çã¯éåžžã«éèŠã§ãã
- 課é¡ïŒ ã²ãŒã ãšã³ãã£ãã£ã®äœçœ®ãäœåããã®ä»ã®å±æ§ã¯ããã°ãã°1ç§ã«äœåºŠããæ¥éã«å€åããŸãã
useMutableSourceã«ãã解決çïŒ ã²ãŒã ã®ç¶æ ãã·ãã¥ã¬ãŒã·ã§ã³ããŒã¿ã¯ãé«åºŠã«æé©åããããã¥ãŒã¿ãã«ã¹ãã¢ã§ç®¡çã§ããŸãããã¬ã€ã€ãŒã®äœåãã¹ã³ã¢ããŸãã¯åçãªããžã§ã¯ãã®äœçœ®ã衚瀺ããUIèŠçŽ ã¯ãuseMutableSourceãæŽ»çšããŠããããã®æ¥éãªå€åã«æå°éã®ãªãŒããŒãããã§åå¿ããããšãã§ããŸãã- ã°ããŒãã«ãªã€ã³ãã¯ãïŒ äžçäžã®ãã¬ã€ã€ãŒããã²ãŒã ã®ç¶æ æŽæ°ãå¹ççã«åŠçã»ã¬ã³ããªã³ã°ãããããšã§ãæµåçã§å¿çæ§ã®é«ãã²ãŒã ã€ã³ã¿ãŒãã§ãŒã¹ãäœéšããããè¯ããã«ããã¬ã€ã€ãŒäœéšã«è²¢ç®ããŸãã
æœåšçãªæ¬ ç¹ãšåæ€èšãã¹ãå Žå
匷åã§ã¯ãããŸãããuseMutableSourceã¯å®éšçãªããã¯ã§ããããã¹ãŠã®ç¶æ
管çåé¡ã«å¯Ÿããäžèœè¬ã§ã¯ãããŸããããã®éçãçè§£ããããšãäžå¯æ¬ ã§ãïŒ
- è€éãïŒ å€éšã®ãã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ãšãã®
getSnapshot/subscribeã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ã»ç®¡çããããšã¯ãèŠæ±ã®å°ãªãã·ããªãªã§useStateãã³ã³ããã¹ãã®ãããªãããã·ã³ãã«ã§çµã¿èŸŒã¿ã®Reactç¶æ ã¡ã«ããºã ã䜿çšãããããè€éã«ãªãããšããããŸãã - ãããã°ïŒ ãã¥ãŒã¿ãã«ãªç¶æ ã®ãããã°ã¯ãã€ãã¥ãŒã¿ãã«ãªç¶æ ã®ãããã°ãããé£ããå ŽåããããŸããçŽæ¥çãªãã¥ãŒããŒã·ã§ã³ã¯ãæ³šææ·±ã管çããªããšäºæãã¬å¯äœçšã«ã€ãªããå¯èœæ§ãããããã§ãã
- `experimental`ã¹ããŒã¿ã¹ïŒ å®éšçãªæ©èœã§ããããããã®APIã¯å°æ¥ã®ReactããŒãžã§ã³ã§å€æŽãããå¯èœæ§ããããŸããéçºè ã¯ãã®ããšãèªèããæœåšçãªç§»è¡ã«åããå¿ èŠããããŸãã
- ãã¹ãŠã®ç¶æ
ã«é©ããŠããããã§ã¯ãªãïŒ å€æŽããŸãã§ãã£ãããéåžžã«é«é »åºŠã®æŽæ°ãå¿
èŠãšããªãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ
ã«ã€ããŠã¯ãæšæºçãªReactã®ç¶æ
管çãã¿ãŒã³ïŒ
useState,useReducer, Context APIïŒããã°ãã°ããã·ã³ãã«ã§é©åã§ããuseMutableSourceãé床ã«äœ¿çšãããšãäžå¿ èŠãªè€éããå°å ¥ããå¯èœæ§ããããŸãã
ã°ããŒãã«ãªå°å ¥ã«ããããã¹ããã©ã¯ãã£ã¹
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§useMutableSourceãæåè£ã«å°å
¥ããæé©ãªããã©ãŒãã³ã¹ã確ä¿ããããã«ã¯ïŒ
- å°ããå§ããïŒ ãŸãã¯ãé«é »åºŠã®ãã¥ãŒã¿ãã«ããŒã¿ãæ±ããã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ãæç¢ºã«å®çŸ©ãããããã©ãŒãã³ã¹ãéèŠãªé åã§
useMutableSourceã䜿çšããããšããå§ããŠãã ããã - ããŒã¿ãœãŒã¹ãæœè±¡åããïŒ ãã¥ãŒã¿ãã«ãªããŒã¿ãœãŒã¹ã®ããã«æç¢ºãªæœè±¡åã¬ã€ã€ãŒãäœæããŠãã ãããããã«ãããå®è£ ã亀æããããã³ã³ããŒãã³ããç¬ç«ããŠãã¹ããããããããšã容æã«ãªããŸãã
- å æ¬çãªãã¹ãïŒ ããŒã¿ãœãŒã¹ãšãããšçžäºäœçšããã³ã³ããŒãã³ãã«å¯ŸããŠããŠããããã¹ããšçµ±åãã¹ããå®è£ ããŠãã ããããšããžã±ãŒã¹ãæŽæ°ã·ããªãªã®ãã¹ãã«çŠç¹ãåœãŠãŠãã ããã
- ããŒã ãæè²ããïŒ éçºããŒã ããã¥ãŒã¿ãã«ãªç¶æ
ãã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ããããŠ
useMutableSourceãReactãšã³ã·ã¹ãã ã«ã©ã®ããã«é©åãããã®ååãçè§£ããŠããããšã確èªããŠãã ããã - ããã©ãŒãã³ã¹ãç¶ç¶çã«ç£èŠããïŒ ç¹ã«
useMutableSourceã䜿çšããæ©èœãå°å ¥ãŸãã¯å€æŽããåŸã¯ã宿çã«ã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŠãã ãããç°ãªãå°åããã®ãŠãŒã¶ãŒãã£ãŒãããã¯ã¯éåžžã«è²Žéã§ãã - é
å»¶ãèæ
®ããïŒ
useMutableSourceã¯ã¬ã³ããªã³ã°ãæé©åããŸããããããã¯ãŒã¯ã®é å»¶ãéæ³ã®ããã«è§£æ±ºããããã§ã¯ãããŸãããçã«ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³ã®ããã«ã¯ããšããžã³ã³ãã¥ãŒãã£ã³ã°ãCDNãå°ççã«åæ£ããããŒã¿ã¹ãã¢ãªã©ã®æè¡ãæ€èšããŠãããŒã¿ã®ç§»åæéãæå°éã«æããŠãã ããã
çµè«
Reactã®experimental_useMutableSourceããã¯ã¯ãReactãè€éãªããŒã¿ã¬ã³ããªã³ã°ã·ããªãªãæ±ãèœåã«ããã倧ããªé²æ©ã衚ããŠããŸãããªã¢ã«ã¿ã€ã æŽæ°ãé«é »åºŠã®ããŒã¿æäœããããŠå€æ§ãªãããã¯ãŒã¯ç¶æ³ã«ãããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«äŸåããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠããã®ããã¯ã¯ããã©ãŒãã³ã¹æé©åã®ããã®åŒ·åãªææ®µãæäŸããŸããgetSnapshotãšsubscribeãæ
éã«å®è£
ããã³ã³ã«ã¬ã³ãã¬ã³ããªã³ã°ãšçµ±åããé©åãªå€éšããŒã¿ãœãŒã¹ãéžæããããšã§ãéçºè
ã¯å€§å¹
ãªããã©ãŒãã³ã¹åäžãå®çŸã§ããŸãã
ãã®ããã¯ãé²åãç¶ããã«ã€ããŠãããã©ãŒãã³ã¹ãé«ããå¿çæ§ãè¯ããã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããäžã§ã®ãã®åœ¹å²ã¯ééããªãå¢å€§ããã§ããããä»ã®ãšãããããã¯Webããã©ãŒãã³ã¹ã®éçãæŒãåºããéçºè ãäžçäžã§ãããã€ãããã¯ã§é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåµé ã§ããããã«ãããšããReactã®ã³ãããã¡ã³ãã®èšŒãšããŠååšããŠããŸãã